/**
 * 环境变量配置类型定义
 * 
 * @property BASE_URL - API 基础地址（所有接口请求的前缀）
 * @property PROXY_PREFIX - 开发环境代理前缀（可选，主要用于本地开发跨域）
 * @property MODE - 当前环境模式（开发/测试/生产）
 */
interface EnvConfig {
    BASE_URL: string;
    PROXY_PREFIX?: string; // 可选属性
    MODE: 'development' | 'test' | 'production';
}

/**
 * 不同环境的静态配置集合
 * 
 * 说明：
 * 1. development - 开发环境配置（本地运行）
 *    - BASE_URL 通常指向本地代理路径（如 /api）
 *    - PROXY_PREFIX 与 vite.config.ts 中的代理配置保持一致
 * 
 * 2. test - 测试环境配置
 *    - 使用测试服务器地址（无代理需求）
 * 
 * 3. production - 生产环境配置
 *    - 使用线上正式地址
 */
const envs: Record<string, EnvConfig> = {
    development: {
        BASE_URL: '/api', // 开发环境接口前缀
        PROXY_PREFIX: '/api', // 代理标识（需与 vite 代理配置一致）
        MODE: 'development' // 环境标识
    },
    test: {
        BASE_URL: 'http://test-api.example.com', // 测试环境接口地址
        MODE: 'test' // 环境标识（不需要代理）
    },
    production: {
        BASE_URL: 'http://api.example.com', // 生产环境接口地址
        MODE: 'production' // 环境标识
    }
};

/**
 * 获取当前环境配置
 * 
 * 实现逻辑：
 * 1. 通过 import.meta.env.MODE 获取 Vite 提供的环境变量
 *    - 默认值 'development' 防止未定义情况
 * 2. 从 envs 对象中取出对应环境的配置
 * 3. 如果未匹配到环境配置，则返回开发环境配置作为兜底
 * 
 * @returns 当前环境的配置对象
 */
const getEnvConfig = (): EnvConfig => {
    // import.meta.env.MODE 由 Vite 自动注入
    // 值取决于启动命令：
    //   - dev 模式: 'development'
    //   - build 模式: 'production'
    //   - 可通过 --mode 参数指定（如 --mode test）
    const mode = import.meta.env.MODE || 'development';

    // 返回匹配的环境配置，若无匹配则返回开发环境配置
    return envs[mode] || envs.development;
};

// 导出当前环境配置（单例模式，避免重复计算）
export const envConfig = getEnvConfig();